package main

import "fmt"

/*
*
6表达式：
两种表达式
Go表达式：根据调用者不同，方法分为两种表现形式：
 1. instance.method(args...)
 2. <type>.func(instance,args...)

前者称为 method value 后者 method expression.
两者都可以像普通函数那样赋值和传参，区别在于method value 绑定实例，而 method expression 则须显式传参。
*/

type User struct {
	id   int
	name string
}

func (self *User) Test() {
	fmt.Printf("%p, %v\n", self, self)
}

func main() {
	u := User{1, "Tom"}
	u.Test()

	mValue := u.Test //绑定实例
	mValue()         //隐式传递 receiver

	mExpression := (*User).Test //不绑定实例
	mExpression(&u)             //显式传参，显式传递 receiver
}
